const express = require("express");
const router = express.Router();
const usertable = require("../../database/userinfo")
const multer = require("multer");
const path = require("path")

// 判断用户是否登录
router.use((req, res, next) => {
    if (!req.session.userInfo) {
        return res.send({
            code: 7,
            message: "未登录，不能修改个人信息"
        })
    }
    next();
});

// 修改用户
router.post("/modifyUser", async (req, res) => {
    let { username } = req.body;
    if (username === req.session.userInfo.username) {
        return res.send({
            code: 2,
            message: "新用户名与原用户名是相同的，不可以修改"
        })
    }
    let userDoc = await usertable.findOne({ username })
    if (userDoc) {
        res.send({
            code: 2,
            message: "该用户名已经被别人用了，请更换一个"
        })
    }
    // 修改数据库的用户名
    await usertable.findByIdAndUpdate(req.session.userInfo._id, { username })
    // 修改session的数据
    req.session.userInfo.username = username;
    console.log(req.session.userInfo);
    res.send({
        code: 0,
        message: "修改成功",
        data: req.session.userInfo   //提供最新的用户信息给前端
    })
});


// 修改密码
router.post("/modifyPass", async (req, res) => {

    let { newPass, oldPass } = req.body;
    if (newPass === oldPass) {
        return res.send({
            code: 10,
            message: "新旧密码能一致"
        })
    }
    let userDoc = await usertable.findById(req.session.userInfo._id)
    console.log(userDoc.password);
    if (oldPass !== userDoc.password) {
        return res.send({
            code: 9,
            message: "原密码错误"
        })
    }
    await usertable.findByIdAndUpdate(req.session.userInfo._id, { password: newPass })
    req.session.destroy()//销毁当前的session，因为修改密码后必须重新登录
    res.send({
        code: 0,
        message: "修改成功，请重新登录",
    })
})

// 修改头像
router.post("/photo", async (req, res) => {
    let name = null;
    // 配置multer中间件处理表单上传的图片文件
    let upload = multer({
        storage: multer.diskStorage({//配置项
            // 设置文件存储在服务端的哪个目录
            destination: function (req, file, callback) {
                callback(null, path.join(__dirname, "../../public/images/photo"))
            },
            // 设置文件的名字（防重名）
            filename: function (req, file, callback) {
                let { ext } = path.parse(file.originalname);
                name = req.session.userInfo._id + new Date().getTime() + ext;
                callback(null, name);
            }
        })
    }).single("file"); //处理name名为file的控件上传的图片文件   name值要匹配

    upload(req, res, async (err) => {
        if (err) {
            res.send({
                code: 4,
                message: "头像上传失败"
            })
        } else { //文件已经存储到服务端的指定目录了
            let photo = `/images/photo/${name}`;
            //改数据库里图片的路径
            await usertable.findByIdAndUpdate(req.session.userInfo._id, { photo });

            //改session里图片的路径
            req.session.userInfo.photo = photo;

            //响应前端
            res.send({
                code: 0,
                message: "头像修改成功",
                data: req.session.userInfo
            })
        }
    });
})
module.exports = router;